home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / progjour / 1991 / 01 / test_blk.asm < prev    next >
Assembly Source File  |  1990-11-01  |  2KB  |  113 lines

  1.     title    test block
  2.     include    asm.inc
  3.     .stack
  4.  
  5.     public    main
  6.  
  7. BLOCK_SIZE    equ    16384
  8. TEST_SIZE    equ    30        ; number of blocks to use in test
  9.  
  10.     .data?
  11.     extrn    argc:word,argv:dword
  12.  
  13. block_handles    dw    TEST_SIZE dup(?)
  14.  
  15.     .const
  16. ertx_block_data    db    'Bad data in block',0
  17.  
  18.  
  19.     .code
  20.  extn startup,exit_program,perror,block_alloc,random,block_read,set_strerror
  21.  extn block_file_open,block_file_read
  22.  
  23.  
  24. ;;    main
  25. ;
  26. main    proc
  27.     lea    di,block_handles
  28.  
  29.     mov    cx,TEST_SIZE
  30. mai1:    call    create_test_block
  31.     jc    mai9
  32.     stosw
  33.     loop    mai1
  34.  
  35.     mov    cx,TEST_SIZE*10        ; read random blocks
  36.     call    read_random_blocks
  37.     jc    mai9
  38.  
  39.     cmp    argc[bp],2
  40.     jb    mai3            ;  if no file name on command line
  41.  
  42.     lds    si,argv[bp]        ; map file to virtual memory
  43.     mov    si,[si+2]
  44.     call    block_file_open
  45.     jc    mai9            ;  if file not found
  46.  
  47.     mov    cx,ax            ; read file blocks in reverse order
  48. mai2:    mov    ax,cx
  49.     dec    ax
  50.     call    block_file_read
  51.     jc    mai9
  52.     loop    mai2
  53.  
  54. mai3:    mov    cx,TEST_SIZE        ; read more random blocks
  55.     call    read_random_blocks
  56.     jc    mai9
  57.  
  58.     ret
  59.  
  60. mai9:    mov    si,NULL_POINTER
  61.     call    perror
  62.     stc
  63.     ret
  64. main    endp
  65.  
  66.  
  67. ;;    create test block
  68. ;
  69. ;    exit    AX,BX    block handle
  70. ;        Cf    if error
  71. ;
  72. create_test_block proc
  73.     pushm    cx,di,es
  74.     call    block_alloc
  75.     jc    ctb1
  76.     mov    cx,ax
  77.     shr    cx,1
  78.     mov    ax,bx
  79.     rep    stosw
  80. ctb1:    popm    es,di,cx
  81.     ret
  82. create_test_block endp
  83.  
  84.  
  85. ;;    read random blocks
  86. ;
  87. ;    entry    CX    number of blocks to read
  88. ;    exit    Cf    if error
  89. ;    uses    AX,CX,SI,DS
  90. ;
  91. read_random_blocks proc
  92.     push    bx
  93. rrb1:    mov    ax,TEST_SIZE
  94.     call    random
  95.     add    ax,ax
  96.     mov    si,ax
  97.     mov    bx,block_handles[bp+si]
  98.     call    block_read
  99.     jc    rrb2
  100.     cmp    bx,[si]
  101.     jne    rrb3
  102.     loop    rrb1
  103.     clc
  104. rrb2:    pop    bx
  105.     ret
  106.  
  107. rrb3:    lea    ax,ertx_block_data    ; *Bad data in block*
  108.     call    set_strerror
  109.     jmp    rrb2
  110. read_random_blocks endp
  111.  
  112.     end
  113.